package com.zxw.article.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zxw.common.entity.article.ArticleEntity;
import com.zxw.common.entity.article.ArticleListQuery;
import com.zxw.common.entity.article.ArticleQuery;
import com.zxw.common.entity.article.ArticleVO;
import com.zxw.common.entity.article.count.ArticleCategoryCountVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 文章信息表 服务类
 * </p>
 *
 * @author zhanxuewei
 * @since 2022-09-19
 */
public interface ArticleService extends IService<ArticleEntity> {

    /**
     * 添加
     *
     * @param articleQuery ArticleQuery
     * @return 是否成功 true|false
     */
    boolean save(ArticleQuery articleQuery);

    /**
     * 批量添加
     *
     * @param list List<ArticleQuery>
     * @return 是否成功 true|false
     */
    boolean saveBatch(List<ArticleQuery> list);

    /**
     * 根据ID集合批量删除
     *
     * @param ids id集合
     * @return 是否成功 true|false
     */
    boolean removeByIds(List<String> ids);

    /**
     * 根据ID修改
     *
     * @param articleQuery ArticleQuery
     * @return 是否成功 true|false
     */
    boolean updateById(ArticleQuery articleQuery);

    /**
     * 根据ID查询数据
     *
     * @param id ID
     * @return ArticleDO
     */
    ArticleEntity getById(String id);

    /**
     * 条件分页查询
     *
     * @param articleListQuery ArticleListQuery
     * @return IPage<ArticleDO>
     */
    IPage<ArticleEntity> list(ArticleListQuery articleListQuery);

    /**
     * 分页
     *
     * @param articleListQuery
     * @return
     */
    IPage<ArticleVO> pageList(ArticleListQuery articleListQuery);

    /**
     * 条件查询
     *
     * @param articleListQuery
     * @return
     */
    List<ArticleVO> queryList(ArticleListQuery articleListQuery);

    /**
     * 查询浏览排行
     *
     * @param limit
     * @return
     */
    List<ArticleVO> queryScanRankList(Integer limit);

    /**
     * 详情
     *
     * @param id
     * @return
     */
    ArticleVO detail(String id);

    /**
     * 根据文章分类统计文章数
     *
     * @return
     */
    List<ArticleCategoryCountVO> articleCategoryCount();

    /**
     * echarts文章分类统计饼图
     *
     * @return
     */
    List<Map<String, Object>> echartsArticleCategoryCountPie();


}
